//
//  main.m
//  03-集合
//
//  Created by dllo on 16/7/6.
//  Copyright © 2016年 yh. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
//     1.数组
//     数组: 可变数组 NSMutableArray 与 不可变数组 NSArray
//     数组中只能存放对象类型元素
//     数组主要是有序存放元素的集合类型 并且可以通过下标取值
//     不可变数组只能取值 可变数组可以増 删 改

#if 0
    // 2. 初始化一个不可变数组
    // 1> initWithObjects + 任意对象类型
    //      有序填入每个元素 初始化结束以nil为判别标准 遇到nil 就表示数组结束
    //      当数组里存在空元素时 如果用初始化 或者 构造器的话 程序运行不会报错 我们可能会不在意 可是此时数组中元素已经丢失 而字面量方式写的 数组可以使程序crash 能很直接的告诉我们 数组中存在空值  所以一般在创建数组时用字面量方法 我们也能知道 在数组中元素不能有空值
        NSArray *array = [[NSArray alloc] initWithObjects: @"123", @"234", @"345", @"456", nil];
    // 2. 构造器方法
        NSArray *arr = [NSArray arrayWithObjects:@"123", @"234", @"345", @"456", nil];
    // 3. 字面量 同 NSString @"" NSNumber @()
        NSArray *myArray = @[@"123", @"234", @"345", @"456"];
        
    // 3. 取值
    // 1> count 取得数组中元素个数 无符号长整型
        NSLog(@"%ld", array.count);
    // 2> 数组通过下标取值
        NSString *numStr = [array objectAtIndex:2];
    // 3> array[0] 语法糖 取值
        NSString *numStr1 = array[0];
    // 4> 根据值取下标
        NSUInteger indexObject = [array indexOfObject:@"234"];
        NSLog(@"%ld", indexObject);
    // 5>
        BOOL a = [array containsObject:@"123"];
        NSLog(@"%@", a ? @"存在" : @"不存在");
    // 6> 用下面的方式来取数组中的元素 可以避免数组为空时 不必要的crash
        [array lastObject];
        [array firstObject];
    // 4 不可变数组改变元素 (会生成新的数组 不会再原有数组的基础上修改) 需要用另一个数组来接收
    //      1> 数组添加一个新的元素
        NSArray *newArr = [array arrayByAddingObject:@"7"];
        NSLog(@"%@", newArr);
    //      2> 在数组中添加一个数组
        NSArray *arr2 = @[@"1", @"2", @"3"];
        newArr = [newArr arrayByAddingObjectsFromArray:arr2];
        NSLog(@"%@", newArr);
#endif

#if 0
    // 可变的数组
    // 1> 初始化方法 同 不可变数组
    // 字面量创建方式 不推荐使用 最好使用初始化方法 和 便利构造器
        NSMutableArray *arr = [@[] mutableCopy];
        NSMutableArray *array = [NSMutableArray array];
    // 2> 取值方式 和 不可变数组一样
    // 3> 可变数组的改变 是改变了本身 与不可变数组不同
    //    1> 数组中添加元素
        [array addObject:@"777"];
    //    2> 插入
        [array insertObject:@"hahah" atIndex:1];
    //    3> 移除
        [array removeObject:@"777"];
    // [array removeAllObjects];
    //    4> 替换
        [array replaceObjectAtIndex:0 withObject:@"zhaohao"];
    // 可变 和 不可变区别
    // 1. 可变指的是本身可变 不可变要是想改变的话 就要用一个数组来接收
    // 2. 可变 继承于不可变 也就是说可变的数组是不可变的子类
#endif
    // 截取字符串 将截取后的每个字符串放到一个数组中 (根据什么截取 什么就会消失)
        NSString *urlStr = @"www.baidu.com";
        NSArray *array = [urlStr componentsSeparatedByString:@"."];
        NSLog(@"%@", array);
    // 将数组中的元素 拼接成一个字符串
        NSArray *arr = @[@"zhoahao", @"yuhan", @"xiaoguo"];
        NSString *str = [arr componentsJoinedByString:@"&"];
        NSLog(@"%@", str);
    
    }
    return 0;
}
